package zxy_eatFood;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;

public class ZXY_Eating extends JFrame {
    XYue XYue = new XYue();
    Grid food = new Grid(); // 食物
    JPanel jp;// 容器
    Timer timer;// 定时器
    int score;

    public static void main(String[] args) {
        new ZXY_Eating();
    }

    public ZXY_Eating() throws HeadlessException {
        initWindow();// 窗口的基本设置
        food.randomXY();// 给食物一个随机的坐标

        initGride();// 绘制网格
        // 开启定时器
        startTimer();
        // 添加键盘监听
        setListener();
        this.setVisible(true);
    }

    /**
     * 添加监听器
     */
    private void setListener() {
        this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                int code = e.getKeyCode();
                if (code == KeyEvent.VK_LEFT || code == KeyEvent.VK_RIGHT || code == KeyEvent.VK_UP || code == KeyEvent.VK_DOWN) {
                    XYue.setDirection(code);
                }
            }
        });
    }

    private void startTimer() {
        timer = new Timer();
        // 参1 是任务对戏 参2是第一次执行的延迟事件 参3 是时间间隔
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                // 潇月移动
                XYue.move();
                boolean isEat = XYue.eat(food);// 潇月吃食物

                if (isEat) {
                    // 如果潇月吃到了 就让食物重新随机新的位置
                    food.randomXY();
                    score++;
                }
                boolean isDead = XYue.isDead();
                if (isDead) {
                    // 如果挂了 停止定时任务
                    // timer.cancel();
                    int option = JOptionPane.showConfirmDialog(ZXY_Eating.this, "笨蛋潇月的得分是" + score + ",不如牛魔二闪,你个菜坤是否重新开始?",
                            "温馨提示", JOptionPane.YES_NO_OPTION);
                    if (option == 0) {
                        XYue = new XYue();
                        food.randomXY();
                        score = 0;
                    } else {
                        System.exit(0);
                    }
                }
                jp.repaint();// 重新绘制
            }
        }, 0, 50);
    }

    /**
     * 绘制网格
     * g.drawLine(50, 50, 150, 150);
     * g.fillRect(300, 300, 50, 50);
     * g.drawArc(200, 100, 40, 40, 10, 90);
     * g.drawRect(200, 200, 50, 50);
     * g.setColor(Color.red);
     */
    private void initGride() {
        jp = new JPanel() {
            @Override
            public void paint(Graphics g) {

                // 擦除指定的范围内的所有内容
                g.clearRect(0, 0, 596, 400);
                // 横线
                 for (int i = 0; i < 37; i++) {
                     g.drawLine(0, 1 + 10 * i, 580, 1 + 10 * i);
                 }
                // 竖线
                 for (int i = 0; i < 59; i++) {
                     g.drawLine(10 * i, 1, 10 * i, 361);
                 }
                // 绘制潇月
                ArrayList<Grid> body = XYue.getBody();
                // 绘制月头
                g.setColor(Color.GREEN);
                Grid head = body.get(0);
                g.fillRect(head.getX(), head.getY(), 10, 10);
                // 绘制潇月身体
                g.setColor(Color.BLACK);
                for (int i = 1; i < body.size(); i++) {
                    Grid grid = body.get(i);
                    g.fillRect(grid.getX(), grid.getY(), 10, 10);
                }
                // 绘制食物
                g.fillRect(food.getX(), food.getY(), 10, 10);

            }
        };
        this.add(jp);// 把容器添加到当前窗口
    }

    /**
     * 窗口的基本设置
     */
    private void initWindow() {
        this.setSize(596, 400);
        this.setLocationRelativeTo(null);
        this.setTitle("贪吃潇月");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(false);
    }
}
